01. TensorFlow 卷积层
TensorFlow 卷积层
让我们看下如何在 TensorFlow 里面实现 CNN。
TensorFlow 提供了
tf.nn.conv2d()
和
tf.nn.bias_add()
函数来创建你自己的卷积层。
# Output depth
k_output = 64
# Image Properties
image_width = 10
image_height = 10
color_channels = 3
# Convolution filter
filter_size_width = 5
filter_size_height = 5
# Input/Image
input = tf.placeholder(
tf.float32,
shape=[None, image_height, image_width, color_channels])
# Weight and bias
weight = tf.Variable(tf.truncated_normal(
[filter_size_height, filter_size_width, color_channels, k_output]))
bias = tf.Variable(tf.zeros(k_output))
# Apply Convolution
conv_layer = tf.nn.conv2d(input, weight, strides=[1, 2, 2, 1], padding='SAME')
# Add bias
conv_layer = tf.nn.bias_add(conv_layer, bias)
# Apply activation function
conv_layer = tf.nn.relu(conv_layer)
上述代码用了
tf.nn.conv2d()
函数来计算卷积,
weights
作为滤波器,
[1, 2, 2, 1]
作为 strides。TensorFlow 对每一个
input
维度使用一个单独的 stride 参数,
[batch, input_height, input_width, input_channels]
。我们通常把
batch
和
input_channels
(
strides
序列中的第一个第四个)的 stride 设为
1
。
你可以专注于修改
input_height
和
input_width
,
batch
和
input_channels
都设置成 1。
input_height
和
input_width
strides 表示滤波器在
input
上移动的步长。上述例子中,在
input
之后,设置了一个 5x5 ,stride 为 2 的滤波器。
tf.nn.bias_add()
函数对矩阵的最后一维加了偏置项。